package me.buick.util.snmp.core.dao;

import java.util.List;

import me.buick.util.snmp.core.pojo.CpuDetailedInfoPojo;
import me.buick.util.snmp.core.pojo.CpuOverviewInfoPojo;
import me.buick.util.snmp.core.pojo.MemoryInfoPojo;
import me.buick.util.snmp.core.pojo.SystemInfoPojo;

/**
 * 
 * DAO gets system relative information like 
 * 
 * CPU detailed Info, CPU Overview Info, Memory Info and System Environment Info
 * 
 * @author buick
 *
 */
public interface SystemInfoDAO {
	
	/**
	 * 
	 * This method is used to get every cpu detailed information on remote system.
	 * 
	 * If the remote system has multi-core CPU or multi-CPUS, this method will return the detailed information 
	 * for every single core or cpu
	 * 
	 * @return List of CpuDetailedInfoPojo
	 */
	public List<CpuDetailedInfoPojo> getCPUDetailed();
	
	/**
	 * 
	 * This method is used to get the overview information of all CPUs(cores) on remote system
	 * 
	 * Especially on the multi-CPUs(cores) system, this method will easily return the overview CPU consumption   
	 * 
	 * @return CpuOverviewInfoPojo
	 */
	public CpuOverviewInfoPojo getCPUOverview();
	
	/**
	 * 
	 * This method is used to get the physical memory overview information (in bytes) on remote system.
	 * 
	 * @return MemoryInfoPojo
	 */
	public MemoryInfoPojo getMemoryInfoPojo();
	
	/**
	 * 
	 * This method is used to get some values from remote system environment like 
	 * 
	 * System Uptime, System Data, System Initial Load Devices, System init params, 
	 * 
	 * Number of Users, Running processes, Max processes
	 * 
	 * @return SystemInfoPojo
	 */
	public SystemInfoPojo getSystemInfoPojo();
	
}
